Data streams, such as live media data, are being communicated over point-to-point networks with increasing frequency. The sizes of the data streams, in terms of both the temporal length and the instantaneous bandwidth demands, are increasing as well. Data streams can be communicated from a single source to multiple destinations using a unicast approach. With unicasting, the source usually sends a separate and complete data stream to each individual destination.
Alternatively, data streams can be communicated from a single source to multiple destinations using a multicast approach. With multicasting, the source usually sends the entire data stream to a limited number of initial nodes, such as one or more routers. These initial nodes then forward the data stream to multiple other nodes. The data stream may be copied and split at a given intermediate node when required to eventually reach an intended destination. These multiple other nodes likewise forward the data stream to still other nodes. Ultimately, the intended multiple destinations are reached. Hence, multicasting can generally facilitate the communication of a data stream from a source to many destinations even when the source has (or other intermediate nodes have) finite processing capabilities and/or bandwidth constraints.
Traditional multicasting has been implemented at the network layer. However, the limited deployment of network-layer multicasting has motivated researchers to try to implement multicasting at the application layer. More recently, some multicasting efforts have been directed to the application-layer. At the application layer, end-hosts can not only receive the data stream, but they may also be recruited to forward the data stream to other end-hosts. Application-layer multicasting creates a new set of challenges that have heretofore not been remedied by existing approaches or technologies.